import axiosInstance from "../../plugins/axios";
import { ElMessage } from "element-plus";
import { useTokenStore } from "../../stores/token";
import { UserDTO } from "../../type/User";
export const Userlogin = async (username: string, password: string) => {
  const res = await axiosInstance.post("/auth/login", {
    username,
    password,
  });
  if (res.data.code == 1) {
    return res.data.data; // 返回数据
  } else {
    const tokenStore = useTokenStore();
    tokenStore.removeToken();
    ElMessage.error(res.data.message || "登录失败");
    throw new Error(res.data.message || "登录失败");
  }
};
export const UserRegister = async (registerForm: any) => {
  const res = await axiosInstance.post("/auth/register", registerForm);
  if (res.data.code == 1) {
    return res.data.data; // 返回数据
  } else {
    ElMessage.error(res.data.message || "注册失败");
    throw new Error(res.data.message || "注册失败");
  }
};
export const sendCaptchaInfo = async (registerForm: any) => {
  const res = await axiosInstance.post("/auth/captcha", registerForm);
  if (res.data.code == 1) {
    return res.data.data; // 返回数据
  } else {
    ElMessage.error(res.data.message || "注册失败");
    throw new Error(res.data.message || "注册失败");
  }
};
export const Userlogout = async () => {
  const res = await axiosInstance.post("/auth/logout");
  if (res.data.code == 1) {
    return res.data.data; // 返回数据
  } else {
    ElMessage.error(res.data.message || "退出登录失败");
    throw new Error(res.data.message || "退出登录失败");
  }
};

export const getLoginInfo = async () => {
  const res = await axiosInstance.get("/auth/loginUser");
  if (res.data.code == 1) {
    return res.data.data; // 返回数据
  } else {
    ElMessage.error(res.data.message || "获取登录信息失败");
    throw new Error(res.data.message || "获取登录信息失败");
  }
};
export const getUserInfo = async (pageNum: number, pageSize: number) => {
  const res = await axiosInstance.post(
    `/users/page?pageNum=${pageNum}&pageSize=${pageSize}`
  );
  if (res.data.code == 1) {
    return res.data.data; // 返回数据
  } else {
    ElMessage.error(res.data.message || "获取用户信息失败");
    throw new Error(res.data.message || "获取用户信息失败");
  }
};
export const exportUserInfo = async () => {
  axiosInstance
    .get("/users/export", {
      responseType: "blob", // 重要
    })
    .then((response) => {
      const url = window.URL.createObjectURL(new Blob([response.data]));
      const link = document.createElement("a");
      link.href = url;
      const contentDisposition = response.headers["content-disposition"];
      let fileName = "下载文件.xlsx";
      if (contentDisposition) {
        const fileNameMatch = contentDisposition.match(
          /filename\*=UTF-8''(.+)/
        );
        if (fileNameMatch.length === 2) {
          fileName = decodeURIComponent(fileNameMatch[1]);
        }
      }
      link.setAttribute("download", fileName);
      document.body.appendChild(link);
      link.click();
      link.remove();
    })
    .catch((error) => {
      ElMessage.error("下载失败，请重试");
      console.error("下载失败:", error);
    });
};
export const updataUserState = async (username: string, status: string) => {
  const res = await axiosInstance.post(
    `/users/updateStatus?username=${username}&status=${status}`
  );
  if (res.data.code === 1) {
    return res.data.data; // 返回数据
  } else {
    ElMessage.error(res.data.message || "更新用户状态失败");
    throw new Error(res.data.message || "更新用户状态失败");
  }
};

export const importUserInfo = async (formData: FormData) => {
  try {
    const res = await axiosInstance.post("/users/import", formData, {
      headers: {
        "Content-Type": "multipart/form-data",
      },
    });
    if (res.data.code === 1) {
      return res.data.data; // 返回数据
    } else {
      ElMessage.error(res.data.message || "导入用户信息失败");
      throw new Error(res.data.message || "导入用户信息失败");
    }
  } catch (error) {
    throw new Error("导入用户信息失败");
  }
};

export const searchUserInfo = async (
  pageNum: number,
  pageSize: number,
  search: any
) => {
  const res = await axiosInstance.post("/users/search", {
    pageNum,
    pageSize,
    search,
  });
  if (res.data.code === 1) {
    return res.data.data; // 返回数据
  } else {
    ElMessage.error(res.data.message || "搜索用户信息失败");
    throw new Error(res.data.message || "搜索用户信息失败");
  }
};

export const findUserById = async (userId: string) => {
  const res = await axiosInstance.get(`/users/${userId}`);
  if (res.data.code === 1) {
    return res.data.data; // 返回数据
  } else {
    ElMessage.error(res.data.message || "获取用户信息失败");
    throw new Error(res.data.message || "获取用户信息失败");
  }
};

export const updateUser = async (user: UserDTO) => {
  const res = await axiosInstance.post("/users/update", user);
  if (res.data.code === 1) {
    return res.data.data; // 返回数据
  } else {
    ElMessage.error(res.data.message || "更新用户信息失败");
    throw new Error(res.data.message || "更新用户信息失败");
  }
};
export const updatePwd = async (pwd:any) => {
  const res = await axiosInstance.post("/users/updatePwd", pwd);
  if (res.data.code === 1) {
    return res.data.data; // 返回数据
  } else {
    ElMessage.error(res.data.message || "更新密码失败");
    throw new Error(res.data.message || "更新密码失败");
  }
};

export const deleteUser = async (user: UserDTO) => {
  const res = await axiosInstance.post("/users/delete", user);
  if (res.data.code === 1) {
    return res.data.data; // 返回数据
  } else {
    ElMessage.error(res.data.message || "删除用户信息失败");
    throw new Error(res.data.message || "删除用户信息失败");
  }
};

export const deleteBatch = async (ids: string[]) => {
  const res = await axiosInstance.post("/users/deleteBatch", ids);
  if (res.data.code === 1) {
    return res.data.data; // 返回数据
  } else {
    ElMessage.error(res.data.message || "删除用户信息失败");
    throw new Error(res.data.message || "删除用户信息失败");
  }
};
export const addUser = async (user: UserDTO) => {
  const res = await axiosInstance.post("/users/add", user);
  if (res.data.code === 1) {
    return res.data.data; // 返回数据
  } else {
    ElMessage.error(res.data.message || "添加用户信息失败");
    throw new Error(res.data.message || "添加用户信息失败");
  }
};
